home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d3 / edit1234.arc / INDEX.BAS < prev    next >
BASIC Source File  |  1991-04-28  |  18KB  |  593 lines

  1. 'NameIndex Generator - QB4: George A. Jones, Route 3, Box 312
  2. 'Louisville, TN 3777-9419 - (615) 982 -2009
  3. DECLARE SUB ASort ()
  4. DECLARE SUB Bottom (Text$)
  5. DECLARE SUB Center (Down%, Text$)
  6. DECLARE SUB EditScrn ()
  7. DECLARE SUB FileSelectScrn ()
  8. DECLARE SUB Frame (Row%, LRow%, Col%, Box%)
  9. DECLARE SUB HelpFile ()
  10. DECLARE SUB InputScrn ()
  11. DECLARE SUB Logon ()
  12. DECLARE SUB MenuScrn ()
  13. DECLARE SUB PrintScrn ()
  14. DECLARE SUB QSearch (Search$, CaseSen%, RecFind%)
  15. DECLARE SUB Spot (Down%, Over%)
  16. DECLARE SUB Upper (Text$)
  17. DECLARE SUB WrongFileScrn ()
  18. COMMON SHARED x%, rn%, TotRec%, RecLen%, File$
  19. Logon
  20. ON ERROR GOTO ErrorProc
  21. ON KEY(10) GOSUB EndProgram
  22. KEY(10) ON
  23. TYPE IndexRecord
  24.    NField AS STRING * 28
  25.    Page AS STRING * 3
  26.    CarrRetn  AS STRING * 2
  27. END TYPE
  28. DIM SHARED Easy AS IndexRecord
  29.  
  30. File$ = "index.dat"
  31. Header$ = "FANNIN COUNTY 1910 CENSUS INDEX"
  32. SubHead$ = "<INDEX TO SURNAMES, HEADS OF HOUSEHOLDS>"
  33. Page$ = "1910-Index-"
  34.  
  35. Menu:
  36. CLOSE
  37. DO WHILE A$ <> "X"
  38. MenuScrn
  39. DO
  40. A$ = UCASE$(INPUT$(1))
  41.    SELECT CASE A$
  42.       CASE IS = "C"
  43.          GOSUB CreateFile
  44.       CASE IS = "F"
  45.          GOSUB SelectFile
  46.       CASE IS = "H"
  47.          HelpFile
  48.       CASE IS = "L"
  49.          GOSUB SetScreen
  50.       CASE IS = "P"
  51.          GOSUB PrintIndex
  52.       CASE IS = "X"
  53.          SYSTEM
  54.       CASE ELSE
  55.    END SELECT
  56. LOOP WHILE INSTR("CFHLPX", A$) = 0
  57. LOOP
  58.  
  59. CreateFile:
  60. IF File$ = "indexsrt.dat" THEN GOSUB WrongFile
  61. GOSUB OpenFile
  62. rn% = TotRec% + 1
  63. Cnt% = 1
  64. InputScrn
  65. x% = 11
  66. DO WHILE Easy.NField <> ""
  67. LOCATE x%, 50: COLOR 15, 0: PRINT rn%: COLOR 1, 3
  68. LOCATE x%, 8: LINE INPUT Easy.NField
  69.    IF Easy.NField = STRING$(28, " ") THEN
  70.       rn% = rn% - 3
  71.       GOSUB OpenFile
  72.       GOSUB ListNames
  73.    END IF
  74. LOCATE x%, 36: LINE INPUT Easy.Page
  75. Easy.CarrRetn = CHR$(13) + CHR$(10)
  76. PUT #1, rn%, Easy
  77.    IF Cnt% >= 4 THEN
  78.       Cnt% = 0
  79.       InputScrn
  80.       x% = 9
  81.    END IF
  82. Cnt% = Cnt% + 1: rn% = rn% + 1: x% = x% + 2:
  83. LOOP
  84.  
  85. SetScreen:
  86. COLOR 1, 1, 8: CLS : Upper " VIEWING THE FILE  " + File$ + CHR$(32)
  87. Frame 8, 16, 5, 2
  88. IF File$ = "index.dat" THEN
  89.    Status$ = "  «U N S O R T E D»  "
  90. ELSE
  91.    Status$ = "  «S O R T E D»  "
  92. END IF
  93. Center 7, "« The Selected file contains " + Status$ + " Names"
  94. GOSUB OpenFile
  95. Center 2, "╔═ THE FILE CONTAINS " + STR$(TotRec%) + " RECORDS ═╗"
  96. Center 2, "START DISPLAY AT RECORD NUMBER »»": INPUT rn%
  97. IF rn% > TotRec% THEN rn% = TotRec%
  98.  
  99. ListNames:
  100. COLOR 1, 3, 1: CLS : Bottom "VIEWING THE FILE"
  101. Cnt% = 1
  102. IF rn% <= 0 THEN rn% = 1
  103. LOCATE 1, 1
  104. FOR rn% = rn% TO TotRec%
  105. COLOR 0, 3: PRINT TAB(55); : COLOR 15, 0: PRINT rn%: COLOR 0, 3
  106. GET #1, rn%, Easy
  107. PRINT TAB(25); : COLOR 0, 7: PRINT Easy.NField; Easy.Page
  108.    IF Cnt% = 10 THEN
  109.       Cnt% = 1
  110.       rn% = rn% + 1
  111.       EXIT FOR
  112.    END IF
  113. Cnt% = Cnt% + 1
  114. NEXT
  115.  
  116. x% = 22: COLOR 0, 2
  117. Center 1, "╠══LIST══EDIT══SEARCH══SORT,═OR══MENU  L / E / S/ * / M══╣"
  118.    IF rn% >= TotRec% + 1 THEN
  119.       COLOR 14, 1: Center 2, "{{ LAST ITEM - PRESS » M «  }}": COLOR 1, 7
  120.    END IF
  121. DO
  122. A$ = UCASE$(INPUT$(1))
  123. SELECT CASE A$
  124.    CASE IS = "L"
  125.       GOSUB ListNames
  126.    CASE IS = "E"
  127.       GOSUB Editor
  128.    CASE IS = "*"
  129.       CLOSE : ASort
  130.    CASE IS = "M"
  131.         RETURN Menu
  132.    CASE IS = "S"
  133.         GOSUB TextSearch
  134.    CASE ELSE
  135. END SELECT
  136. LOOP WHILE INSTR("LES*M", A$) = 0
  137. RETURN Menu
  138.  
  139. Editor:
  140. IF File$ = "indexsrt.dat" THEN GOSUB WrongFile
  141. x% = 22: COLOR 1, 7
  142. Center 1, " «»   PLEASE ENTER NUMBER OF THE LINE YOU WISH TO EDIT »»»   "
  143. LOCATE x%, 70: COLOR 0, 3: INPUT rn%
  144. IF rn% <= 0 OR rn% > TotRec% THEN rn% = TotRec%
  145. GET #1, rn%, Easy
  146. EditScrn
  147. Delete$ = Easy.NField
  148. COLOR 1, 7: LOCATE 16, 18: LINE INPUT Name$
  149.    IF Name$ = "ZZZ" OR Name$ = "zzz" THEN
  150.       Easy.NField = "zzz{del}" + LEFT$(Delete$, 18)
  151.       PUT #1, rn%, Easy
  152.       RETURN ListNames
  153.    END IF
  154.    IF LEN(Name$) <> 0 THEN Easy.NField = Name$
  155. LOCATE 16, 18: PRINT Easy.NField
  156. LOCATE 16, 50: LINE INPUT NuPge$: IF LEN(NuPge$) <> 0 THEN Easy.Page = NuPge$
  157. PUT #1, rn%, Easy
  158. RETURN ListNames
  159.  
  160. TextSearch:
  161. IF File$ = "indexsrt.dat" THEN GOSUB WrongFile
  162. COLOR 1, 3, 1: CLS : Bottom "«« YOU ARE IN SEARCH MODE »»"
  163. CaseSen% = 1
  164. DO WHILE RecFind% < 2
  165.    LOCATE 24, 50: COLOR 0, 3: PRINT "  ] or Press <enter> to Quit";
  166.    LOCATE 24, 2: LINE INPUT "Enter Text to Find  [ "; Search$
  167.    RecFind% = 0
  168.    IF Search$ = "" THEN RETURN Menu
  169.    CALL QSearch(Search$, CaseSen%, RecFind%)
  170.    LOCATE 19, 1: COLOR 0, 3: PRINT SPACE$(480)
  171.    IF RecFind% = 0 THEN
  172.       LOCATE 21, 25: PRINT CHR$(34); Search$; CHR$(34); " not found.";
  173.    ELSE
  174.       LOCATE 21, 22: PRINT "The Last Occurrence of Tex%t Found at Line ";
  175.       COLOR 15, 1: PRINT rn%;
  176.    END IF
  177. LOOP
  178.  
  179. PrintIndex:
  180. GOSUB OpenFile
  181. PrintScrn
  182. LOCATE 15, 38: INPUT rn%: LOCATE 15, 62: INPUT LastNum%
  183.    IF LastNum% > TotRec% THEN LastNum% = TotRec%
  184. COLOR 15, 4: Center 2, "  You Cancel Printing Now by Pressing <M>  "
  185. COLOR 0, 3: Center 2, "Do You Want a Heading ? <Y>es  <N>o  <M>enu"
  186. DO
  187. A$ = UCASE$(INPUT$(1))
  188. SELECT CASE A$
  189.    CASE IS = "Y"
  190.       GOSUB PrinterSetUp
  191.       LPRINT CHR$(27); CHR$(87); CHR$(1): ' double
  192.       LPRINT CHR$(14); TAB(2); Header$;
  193.       LPRINT CHR$(27); CHR$(87); CHR$(0): ' Canc double
  194.       LPRINT TAB(15); SubHead$
  195.       LPRINT
  196.       LineFeed = 1
  197.       pg = 1: EXIT DO
  198.    CASE IS = "N"
  199.       x% = 16: COLOR 0, 7
  200.       Center 1, SPACE$(2) + "PLEASE INDICATE STARTING PAGE NUMBER FOR YOUR PRINT-OUT"
  201.       COLOR 1, 7
  202.       Center 2, SPACE$(22) + "STARTING PAGE NUMBER IS:": INPUT pg
  203.       LPRINT
  204.       GOSUB PrinterSetUp
  205.       EXIT DO
  206.    CASE IS = "M"
  207.       RETURN Menu
  208.    CASE ELSE
  209. END SELECT
  210. LOOP WHILE INSTR("YNM", A$) = 0
  211. IF rn% <= 0 THEN rn% = 1
  212. DO WHILE rn% < LastNum% + 1
  213. LineCnt% = 54
  214.    FOR rn% = rn% TO rn% + 54
  215.       IF INKEY$ = CHR$(27) THEN EXIT DO
  216.    LineCnt% = LineCnt% - 1
  217.    IF rn% > LastNum% THEN EXIT DO
  218.    GET #1, rn%, Easy
  219.    n1$ = Easy.NField + Easy.Page: n2$ = ""
  220.    IF rn% + 55 <= LastNum% THEN
  221.       GET #1, rn% + 55, Easy
  222.       n2$ = Easy.NField + Easy.Page
  223.    END IF
  224.    PRINT TAB(8); n1$; TAB(44); n2$: LPRINT n1$; TAB(38); n2$
  225.    NEXT rn%
  226. rn% = rn% + 55
  227. GOSUB PageNumber: pg = pg + 1
  228. LOOP
  229. IF LineCnt% > 1 THEN
  230.    DO
  231.       LPRINT
  232.       LineCnt% = LineCnt% - 1
  233.    LOOP UNTIL LineCnt% < 1
  234. END IF
  235. CLOSE
  236. GOSUB PageNumber
  237. RETURN Menu
  238.  
  239. PageNumber:
  240. LPRINT CHR$(13)
  241. LPRINT CHR$(27); CHR$(71);
  242. LPRINT CHR$(27); CHR$(83); CHR$(1);
  243. LPRINT TAB(55); Page$; pg
  244. PRINT TAB(25); pg; " Pages sent to Printer"
  245. LPRINT CHR$(27); CHR$(72);
  246. LPRINT CHR$(27); CHR$(84);
  247. LPRINT CHR$(12)
  248. IF LineFeed = 1 THEN
  249.    LPRINT CHR$(13)
  250.    LineFeed = 0
  251. END IF
  252. RETURN
  253.  
  254. PrinterSetUp:
  255. LPRINT CHR$(27); CHR$(88); CHR$(8); CHR$(80); : ' Margin
  256. LPRINT CHR$(27); CHR$(73); CHR$(2); : ' LQ
  257. Bottom "Press <Esc> to Abandon Printing"
  258. RETURN
  259.  
  260. '========U T I L I T I E S========
  261. PageAdvan:
  262. LOCATE 25, 1: COLOR 0, 4: PRINT STRING$(80, 176);
  263. LOCATE 25, 10: COLOR 15, 1: PRINT "▌ Press <Esc> for MENU ▐";
  264. LOCATE 25, 45: COLOR 0, 2: PRINT "▌ Press <enter> to Continue ▐";
  265. DO WHILE K$ <> CHR$(251)
  266. K$ = INKEY$
  267. IF K$ = CHR$(13) THEN RETURN
  268. IF K$ = CHR$(27) THEN RETURN Menu
  269. LOOP
  270.  
  271. OpenFile:
  272. CLOSE : OPEN File$ FOR RANDOM AS #1 LEN = LEN(Easy)
  273. RecLen% = LEN(Easy)
  274. TotRec% = LOF(1) \ LEN(Easy)
  275. RETURN
  276.  
  277. SelectFile:
  278. FileSelectScrn
  279. DO
  280. A$ = UCASE$(INPUT$(1))
  281. SELECT CASE A$
  282.    CASE IS = "S"
  283.         File$ = "indexsrt.dat"
  284.    CASE IS = "U"
  285.         File$ = "index.dat"
  286.    CASE ELSE
  287. END SELECT
  288. LOOP WHILE INSTR("SU", A$) = 0
  289. RETURN Menu
  290.  
  291. WrongFile:
  292. WrongFileScrn
  293. GOSUB PageAdvan
  294. RETURN Menu
  295.  
  296. ErrorProc:
  297. COLOR 0, 3, 4: CLS : Frame 3, 16, 8, 3
  298. x% = 4
  299. SELECT CASE ERR
  300.    CASE 5, 13
  301.       Spot 2, 18: PRINT "* * * P R O G R A M M I N G   E R R O R * * *"
  302.       Spot 2, 18: PRINT "Illegal Function Call or Type Mismatch"
  303.    CASE 25, 68, 71
  304.       Spot 2, 18: PRINT "* * * D E V I C E    E R R O R * * *"
  305.       Spot 2, 18: PRINT "PRINTER or DISK DRIVE not ready or Not Available"
  306.    CASE 63, 64
  307.       Spot 2, 18: PRINT "* * *F I L E  or  R E C O R D   E R R O R * * *"
  308.       Spot 2, 18: PRINT "Bad Record Number, OR Bad File Name"
  309.    CASE ELSE:
  310. END SELECT
  311. Spot 2, 18: PRINT "* * ERROR NUMBER * * ╔═══» ";
  312. COLOR 15, 1: PRINT ERR: COLOR 0, 3
  313. Spot 2, 18: LINE INPUT "Press <ENTER> To Return to MENU....."; anyk$
  314. RESUME Menu
  315.  
  316. EndProgram:
  317.    SYSTEM
  318.  
  319. SUB ASort
  320. COLOR 0, 3, 1: CLS :  Frame 3, 6, 2, 2
  321. Center 2, "  S O R T I N G  «»  P L E A S E   W A I T"
  322. LOCATE 7, 1: BeginTime = TIMER
  323. SHELL "SORTFILE index.dat indexsrt.dat/+0,25"
  324.    ElapseTime = TIMER: BEEP: BEEP: BEEP
  325.    Results = (ElapseTime - BeginTime) / 60
  326. LOCATE 20, 10: COLOR 1, 7
  327.    PRINT "TIME REQUIRED TO SORT WAS ";
  328.    PRINT USING "##.##"; Results; : PRINT "  Minutes"
  329. LOCATE 22, 10: LINE INPUT "Press <ENTER> to continue..."; anyk$
  330. END SUB
  331.  
  332. SUB Bottom (Text$)
  333. LOCATE 25, 1: COLOR 14, 5: PRINT STRING$(80, 240);
  334. Text$ = "█▄▄ " + Text$ + " ▄▄█"
  335. p% = INT(82 - LEN(Text$)) / 2
  336. LOCATE 25, p%: COLOR 15, 2: PRINT Text$;
  337. END SUB
  338.  
  339. SUB Center (Down%, Text$)
  340. x% = x% + Down%
  341. p% = INT((82 - LEN(Text$)) / 2)
  342. LOCATE x%, p%: PRINT Text$;
  343. END SUB
  344.  
  345. SUB EditScrn
  346. COLOR 0, 1, 8: CLS : Upper "T H E   E D I T   S C R E E N": Frame 4, 17, 4, 3
  347. Center 2, "To accept NAME, or PAGE, as written, Press <enter>"
  348. Center 2, "To CORRECT either NAME  or PAGE , re-type entry and Press <enter>"
  349. Center 2, "To DELETE this record - Type " + CHR$(34) + "ZZZ" + CHR$(34) + " and Press <enter>"
  350. Spot 2, 17: COLOR 15, 4: PRINT " E d i t i n g   R e c o r d   N u m b e r"
  351. LOCATE x%, 62: COLOR 15, 0: PRINT rn%
  352. Spot 2, 18: COLOR 0, 2: PRINT "N A M E ": LOCATE x%, 50: PRINT "P A G E"
  353. Spot 2, 18: COLOR 0, 7: PRINT Easy.NField; : LOCATE x%, 50: PRINT Easy.Page
  354. END SUB
  355.  
  356. SUB FileSelectScrn
  357. COLOR 0, 1, 8: CLS : Upper "FILE SELECTION MENU": Frame 4, 10, 4, 3
  358. Center 3, "Select <U>nsorted File for Searches, Editing, and Additions"
  359. Center 1, "Select <S>orted File for Print of Final Index"
  360. COLOR 0, 7: Center 2, " ▀ Choose <S> or <U> «» See Helpful Hints Below ▀ "
  361. Frame 14, 22, 4, 2
  362. Spot 13, 8
  363. PRINT "<U>nsorted file is source data; therefore all additions, edits, etc,"
  364. Spot 1, 8
  365. PRINT "must be made while using that file.  The <S>orted file is recreated"
  366. Spot 1, 8
  367. PRINT "each time you use sort and any changes to <S>orted file would be"
  368. Spot 1, 8
  369. PRINT "over-written by the Sort."
  370. Spot 2, 8
  371. PRINT "Remember to sort file and select <S>orted file for final print-out"
  372. Spot 1, 8
  373. PRINT "of index."
  374. END SUB
  375.  
  376. SUB Frame (Row%, LRow%, Col%, Box%)
  377. ss% = INT(80 - (2 * Col%))
  378. SELECT CASE Box%
  379.    CASE 1
  380.       LOCATE Row%, Col%: PRINT CHR$(218); STRING$(ss%, 196); CHR$(191)
  381.       Side% = 179: GOSUB SideLines
  382.       LOCATE Row%, Col%: PRINT CHR$(192); STRING$(ss%, 196); CHR$(217);
  383.    CASE 2
  384.       LOCATE Row%, Col%: PRINT CHR$(201); STRING$(ss%, 205); CHR$(187)
  385.       Side% = 186: GOSUB SideLines
  386.       LOCATE Row%, Col%: PRINT CHR$(200); STRING$(ss%, 205); CHR$(188);
  387.    CASE 3
  388.       LOCATE Row%, Col%: PRINT CHR$(219); STRING$(ss%, 223); CHR$(219)
  389.       Side% = 219: GOSUB SideLines
  390.       LOCATE Row%, Col%: PRINT CHR$(219); STRING$(ss%, 220); CHR$(219);
  391.    CASE 6
  392.       Row% = Row% + 1: LRow% = LRow% + 2: Col% = Col% + 2
  393.       FOR Row% = Row% TO LRow%: LOCATE Row%, Col%
  394.       PRINT STRING$(ss% + 2, 219): NEXT
  395.    CASE ELSE
  396. END SELECT
  397. x% = 3
  398. EXIT SUB
  399.  
  400. SideLines:
  401. FOR Row% = Row% + 1 TO LRow%: LOCATE Row%, Col%:
  402. PRINT CHR$(Side%); SPACE$(ss%); CHR$(Side%): NEXT
  403. RETURN
  404. END SUB
  405.  
  406. SUB HelpFile
  407. COLOR 0, 3, 0: CLS : Frame 3, 4, 12, 1
  408. Center 1, "W O R K I N G"
  409. HelpText = FREEFILE
  410. OPEN "index.hlp" FOR BINARY AS HelpText
  411. Size = LOF(HelpText)
  412. Help$ = STRING$(Size, 32)
  413. GET HelpText, , Help$
  414. CLOSE HelpText
  415.  
  416. DO
  417. m% = 1
  418.    DO
  419.       CLS
  420.       FOR x% = 1 TO 25: LOCATE x%, 1: PRINT MID$(Help$, m%, 80);
  421.          m% = m% + 80
  422.       NEXT
  423.       DO
  424.          K$ = UCASE$(INKEY$)
  425.          IF K$ = CHR$(27) THEN EXIT SUB
  426.          IF K$ = CHR$(13) OR K$ = "T" THEN EXIT DO
  427.       LOOP
  428.       IF K$ = "T" THEN EXIT DO
  429.       IF m% >= Size THEN EXIT SUB
  430.    LOOP
  431. LOOP
  432. END SUB
  433.  
  434. SUB InputScrn
  435. COLOR 1, 1, 8: CLS : Upper "DATA  ENTRY SCREEN": Frame 3, 18, 2, 3
  436. Spot 2, 8: PRINT "╔═» Type Name - Press <enter>."
  437. Spot 1, 8: PRINT CHR$(186)
  438. Spot 1, 8: PRINT CHR$(186); SPACE$(27); "╔═» Type page number - Press <enter>"
  439. Spot 2, 8: COLOR 0, 2: PRINT "SURNAME, FIRST NAME   "
  440. LOCATE x%, 36: PRINT CHR$(25); "  PAGE "
  441. LOCATE x%, 48: COLOR 11, 0: PRINT "RECORD NUMBER"
  442. COLOR 1, 7: Frame 22, 23, 8, 2
  443. Center 20, " To EXIT - Press <enter> at Next blank SURNAME space": COLOR 7, 4
  444. FOR r% = 11 TO 17 STEP 2
  445.    LOCATE r%, 8: PRINT CHR$(32); STRING$(20, 177)
  446.    LOCATE r%, 36: PRINT CHR$(32); STRING$(2, 177)
  447. NEXT r%
  448. END SUB
  449.  
  450. SUB Logon
  451. COLOR 1, 0, 8: CLS : Bottom "«» Copyright  1989 by George A. Jones «»"
  452. COLOR 7, 0: Frame 6, 16, 11, 6: COLOR 11, 0: Frame 6, 16, 12, 3
  453. p% = 22: COLOR 2, 0
  454. Spot 4, p%: PRINT "╔═══╗ ╔═══╗ ╦═══╗ ╔═══╗ ╦   ╦ ╔═══╗"
  455. Spot 1, p%: PRINT "║     ╠═╡   ║   ║ ╚═══╗ ║   ║ ╚═══╗"
  456. Spot 1, p%: PRINT "╚═══╝ ╚═══╝ ╩   ╩ ╚═══╝ ╚═══╝ ╚═══╝"
  457. p% = 25: COLOR 14, 0
  458. Spot 2, p%: PRINT "╒═╦═╕ ╦═══╗ ╦═══╗ ╔═══╗ ╦   ╦"
  459. Spot 1, p%: PRINT "  ║   ║   ║ ║   ║ ║   ╜ ╚╗ ╔╝"
  460. Spot 1, p%: PRINT "  ║   ║   ║ ║   ║ ╠═╡     X"
  461. Spot 1, p%: PRINT "  ║   ║   ║ ║   ║ ║   ╖ ╔╝ ╚╗"
  462. Spot 1, p%: PRINT "╘═╩═╛ ╩   ╩ ╩═══╝ ╚═══╝ ╩   ╩"
  463. COLOR 11, 0: Center 5, "<<< Press any Key >>>"
  464. SLEEP (6)
  465. END SUB
  466.  
  467. SUB MenuScrn
  468. COLOR 1, 1, 4: CLS : Bottom "P R O G R A M   S E L E C T I O N"
  469. COLOR 1, 15: Frame 2, 3, 4, 2
  470. x% = 2: Center 1, "FANNIN COUNTY GEORGIA  -  1910 CENSUS INDEX"
  471. COLOR 8: Frame 6, 17, 6, 6: COLOR 14, 3: Frame 6, 17, 6, 3
  472. COLOR 11, 3: Frame 7, 8, 14, 1: COLOR 0, 3: Center 5, "T H E   M E N U"
  473. p% = 8: COLOR 1, 7
  474. Spot 4, p%: PRINT "<C>reate INDEX / add to INDEX  "
  475. LOCATE x%, 48: PRINT "<F>ile Selection Feature "
  476. Spot 2, p%: PRINT "<L>ist, Edit, Search, Sort Data"
  477. LOCATE x%, 48: PRINT "<P>rint Two Column INDEX "
  478. Spot 2, p%: PRINT "<H>elp - How to Create Index   "
  479. LOCATE x%, 48: PRINT "   e<x>it the Program    "
  480. x% = 10: p% = 9: COLOR 15, 4
  481. Spot 2, p%: PRINT "C": LOCATE x%, 49: PRINT "F"
  482. Spot 2, p%: PRINT "L": LOCATE x%, 49: PRINT "P"
  483. Spot 2, p%: PRINT "H": LOCATE x%, 53: PRINT "X"
  484. COLOR 9, 7: Frame 21, 22, 4, 3
  485. COLOR 1, 7: Center 19, "SELECT  C - F - H - L - P - or - X"
  486. END SUB
  487.  
  488. SUB PrintScrn
  489. COLOR 1, 1, 8: CLS : Upper "Printer Instructions  " + File$
  490. Frame 3, 20, 3, 1: Center 18, "┤ Select Number of Lines/Pages ├"
  491. IF File$ = "index.dat" THEN
  492.    Status$ = "  «U N S O R T E D»  "
  493. ELSE
  494.    Status$ = "  «S O R T E D»  "
  495. END IF
  496. x% = 4:
  497. Center 1, "<< File Selected contains " + Status$ + " Names >>"
  498. COLOR 0, 2: Center 2, "THERE ARE " + STR$(TotRec%) + " RECORDS IN THE FILE"
  499. Spot 2, 6: COLOR 0, 7: PRINT "»» USING 110 RECORDS TO PAGE "
  500. LOCATE x%, 38: PRINT "»» RECORD 1 TO 550 IS FIVE PAGES "
  501. Spot 2, 38: PRINT "»»  551 TO 1100 IS TEN PAGES     "
  502. Spot 2, 38: PRINT "»» 1101 TO 1650 IS FIFTEEN PAGES "
  503. COLOR 1, 7
  504. Center 2, "START PRINTING AT RECORD [       ]  END AT RECORD [        ]"
  505. END SUB
  506.  
  507. SUB QSearch (Search$, CaseSen%, RecFind%)
  508. CLOSE : OPEN "index.dat" FOR BINARY AS 1
  509. FileSize! = LOF(1)
  510. Size! = FRE("") / 3
  511. IF Size! > 32000 THEN Size! = 32000
  512. Size! = INT(Size! / RecLen%) * RecLen%
  513. Pass% = FileSize! / Size!
  514. IF FileSize! / Size! > INT(Pass%) THEN Pass% = Pass% + 1
  515.    FOR r% = 1 TO Pass%
  516.       BgnRec% = 1
  517.       Text$ = SPACE$(Size!)
  518.       GET 1, , Text$
  519.       GOSUB SearchRecord
  520.       Text$ = ""
  521.    NEXT
  522. CLOSE 1
  523. EXIT SUB
  524.  
  525. SearchRecord:
  526. DO
  527. NextRecord = 0
  528. IF CaseSen% = 1 THEN
  529.    Addr% = INSTR(BgnRec%, UCASE$(Text$), UCASE$(Search$))
  530. ELSE
  531.    Addr% = INSTR(BgnRec%, Text$, Search$)
  532. END IF
  533. IF Addr% > 0 THEN
  534.    RecFind% = 1
  535.    Place% = (Addr% \ RecLen%) * RecLen% + 1
  536.    rn% = ((Size! / RecLen%) * r%) - ((Size! - Place%) \ RecLen%)
  537.    Cnt% = Cnt% + 1
  538.    Record$ = MID$(Text$, Place%, RecLen% - 2)
  539.    VIEW PRINT 12 TO 16: LOCATE 16, 80: PRINT : VIEW PRINT
  540.    LOCATE 19, 8: PRINT "Text Found in Record: ";
  541.    COLOR 15, 0: PRINT rn%;
  542.    LOCATE 19, 50: COLOR 15, 1: PRINT Cnt%;
  543.    COLOR 0, 3: PRINT " Record(s) Found ";
  544.    LOCATE 20, 12: PRINT "..╚══»....Press <enter> to continue Search.";
  545.    LOCATE 21, 20: PRINT "....OR....Press <Esc> + <enter> to Stop Searching.";
  546.    Flash$ = MID$(Text$, Addr%, LEN(Search$))
  547.    LocFlash = Addr% - Place% + 1
  548.    LOCATE 18, 2: PRINT Record$;
  549.    COLOR 21, 7: LOCATE 18, LocFlash + 1: PRINT Flash$;
  550.    DO WHILE K$ <> CHR$(251)
  551.    K$ = INKEY$
  552.       COLOR 0, 3
  553.       IF K$ = CHR$(13) THEN
  554.          BgnRec% = Place% + RecLen% - 1
  555.          LOCATE 16, 18: PRINT Record$
  556.          NextRecord = 1
  557.          EXIT DO
  558.       END IF
  559.       IF K$ = CHR$(27) THEN
  560.          LOCATE 18, 2:  PRINT Record$;
  561.          CLOSE 1
  562.          EXIT SUB
  563.       END IF
  564.    LOOP
  565. END IF
  566. LOOP WHILE NextRecord = 1
  567. RETURN
  568. END SUB
  569.  
  570. SUB Spot (Down%, Over%)
  571. x% = x% + Down%: LOCATE x%, Over%
  572. END SUB
  573.  
  574. SUB Upper (Text$)
  575. LOCATE 1, 2: COLOR 14, 4: PRINT STRING$(78, 196);
  576. Text$ = "┤ " + Text$ + " ├"
  577. p% = INT(82 - LEN(Text$)) / 2
  578. LOCATE 1, p%: PRINT Text$;
  579. COLOR 0, 7
  580. END SUB
  581.  
  582. SUB WrongFileScrn
  583. COLOR 8, 0, 4: CLS : Frame 4, 18, 4, 6: COLOR 1, 7: Frame 4, 18, 4, 3
  584. COLOR 15, 1: Center 3, "▌  You are trying to use wrong file. ▐"
  585. COLOR 0, 7
  586. Center 3, "You cannot add names to, Search, or Edit <S>orted file."
  587. Center 2, "If You wish to Search, Edit, or Add Names, please return to MENU"
  588. Center 1, "and use <F>ile Selection feature to choose <U>nsorted file."
  589. COLOR 1, 7
  590. Center 4, "<< Please See Helpful Hints at <F>ile Selection Menu >>"
  591. END SUB
  592.  
  593.